home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
ABUSESRC.ZIP
/
AbuseSrc
/
imlib
/
mouse.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-11
|
2KB
|
111 lines
#include "video.hpp"
#include "sprite.hpp"
#include "image.hpp"
#include "filter.hpp"
#include "mdlread.hpp"
#include "monoprnt.hpp"
#include "mouse.hpp"
unsigned char def_mouse[]=
{ 0,2,0,0,0,0,0,0,
2,1,2,0,0,0,0,0,
2,1,1,2,0,0,0,0,
2,1,1,1,2,0,0,0,
2,1,1,1,1,2,0,0,
2,1,1,1,1,1,2,0,
0,2,1,1,2,2,0,0,
0,0,2,1,1,2,0,0,
0,0,2,1,1,2,0,0,
0,0,0,2,2,0,0,0 }; // 8x10
int Mbut,Mx,My;
void JCmouse::set_shape(image *im, int centerx=0, int centery=0)
{
sp->change_visual(im,1);
cx=-centerx;
cy=-centery;
}
JCMouse::JCMouse(image *Screen, palette *pal)
{
image *im;
int br,dr,h;
filter f;
but=0;
cx=cy=0;
#ifdef __DOS
asm {
mov ax, 0 // detect the mouse
int 0x33
mov h, ax
}
here=h;
#else
here=1;
#endif
if (here) // is it here?
{
screen=Screen;
br=pal->brightest(1);
dr=pal->darkest(1);
f.set(1,br);
f.set(2,dr);
im=new image(8,10,def_mouse);
f.apply(im);
sp=new sprite(Screen,im,100,100);
#ifdef __DOS
asm { // mouse the mouse pointer to 40,40
mov ax, 4
mov cx, 40
mov dx, 40
int 0x33
}
#endif
}
}
void JCMouse::update(int newx, int newy, int new_but)
{
int butn,xx,yy;
if (newx<0)
{
#ifdef __DOS
if (here)
{
asm {
mov ax, 0x0b
int 0x33 // get the mouse movement
mov xx,cx
mov yy,dx
mov ax, 3
int 0x33 // get the mouse button status
mov butn,bx
}
lx=mx; ly=my; lbut=but;
but=butn;
mx+=xx;
my+=yy;
if (mx<0) mx=0;
if (my<0) my=0;
if (mx>=screen->width()) mx=screen->width()-1;
if (my>=screen->height()) my=screen->height()-1;
}
#else
Window w1,w2;
int j;
unsigned int mask;
lx=mx; ly=my; lbut=but;
XQueryPointer(display,mainwin,&w1,&w2,&j,&j,&mx,&my,&mask);
but=((mask&Button1Mask)!=0)|
((mask&Button2Mask)!=0)<<2|
((mask&Button3Mask)!=0)<<1;
#endif
} else
{ mx=newx; my=newy; but=new_but; }
}